import axios from 'axios';
import router from '../../router';
import { useLoadingStore } from '@/stores/loading';
import { baseUrl } from './env';

/**
 * 增强版 GET 请求函数
 * 支持自定义 headers 和 withCredentials 配置
 */
export default (
    url = '',
    params = {},
    successCallback = () => {},
    failCallback = () => {},
    config = {
        headers: {},
        withCredentials: true  // 默认携带 Cookie
    }
) => {
    console.log("调用 get 方法，URL:", baseUrl + url, "参数:", params);

    const loadingStore = useLoadingStore();
    loadingStore.setSpinning(true);

    // 合并请求配置
    const axiosConfig = {
        ...config,
        headers: config.headers,
        params,
        withCredentials: config.withCredentials !== undefined ? config.withCredentials : true
    };

    axios.get(baseUrl + url, axiosConfig)
        .then(response => {
            handleResponse(response, successCallback, failCallback, loadingStore);
        })
        .catch(error => {
            handleError(error, failCallback, loadingStore);
        });
};

// 复用公共处理逻辑（与 post.js 相同）
// 注意：实际代码中需要避免重复，可以将这些方法提取到 utils 中
// get.js 新增以下方法
function handleResponse(response, success, fail, loadingStore) {
    loadingStore.setSpinning(false);
    console.log("隐藏加载动画");

    if (response.status >= 200 && response.status < 300) {
        console.log("成功回调");
        success?.(response.data);
    } else {
        console.error("响应状态码异常:", response.status);
        fail?.(response.data);
    }
}

function handleError(error, fail, loadingStore) {
    console.error("请求失败:", error);
    loadingStore.setSpinning(false);

    if (error.response) {
        console.error("HTTP 错误码:", error.response.status);
        fail?.(error.response.data);
    } else if (error.request) {
        console.error("请求未收到响应:", error.request);
        fail?.({ message: "网络连接异常" });
    } else {
        console.error("请求配置错误:", error.config);
        fail?.({ message: error.message });
    }
}